#ifndef __GPIO_H
#define __GPIO_H

#include "imx6ul.h"

typedef enum
{
    gpio_input = 0,
    gpio_output = 1,
}gpio_pin_direction_type;

typedef enum
{
    gpio_noIntmode = 0,
    gpio_lowIntmode = 1,
    gpio_highIntmode = 2,
    gpio_risingIntmode = 3,
    gpio_fallingIntmode = 4,
    gpio_risingOrfallingIntmode = 5,
}gpio_interrupt_type;

typedef struct
{
    //方向
    gpio_pin_direction_type direction;
    //如果为输出，默认引脚高低电平
    uint8_t output;
    //中断设置
    gpio_interrupt_type Intmod;
}gpio_config_type;

void gpio_init(GPIO_Type* GPIOx, uint8_t Pin, gpio_config_type* config);
void gpio_pin_write(GPIO_Type* GPIOx, uint8_t Pin, uint8_t value);
int gpio_pin_read(GPIO_Type* GPIOx, uint8_t Pin);
void gpio_int_config(GPIO_Type* GPIOx, uint8_t Pin, gpio_interrupt_type Intmod);
void gpio_enableint(GPIO_Type* GPIOx, uint8_t Pin);
void gpio_disableint(GPIO_Type* GPIOx, uint8_t Pin);
void gpio_clearflag(GPIO_Type* GPIOx, uint8_t Pin);

#endif // !__GPIO_H